10245. Имена и буквы

 

Заданы имена n людей (пронумерованных от 1 до n в заданном порядке), где каждое имя написано в отдельной строке.

Ваша задача – ответить на m запросов вида “A B”, где A соответствует номеру человека, а B – индексу буквы в имени человека.

Для каждого запроса выведите один соответствующий символ в имени человека.

 

Вход. Первая строка содержит количество людей n (n 105) и число запросов m (m 1000). Каждая из следующих n строк содержит одно имя и может быть до 105 символов. Каждая из следующих m строк содержит два целых числа A (1 A n) и B (0 B < длина имени человека номер A).

Известно, что входные данные содержат не более 106 символов.

 

Выход. Для каждого запроса “A B” выведите символ номер B в имени человека номер A. Все символы следует выводить в одной строке.

 

Пример входа

Пример выхода

 

3 5

Alice

Bob

John

1 3

2 1

3 2

3 3

1 0

 

cohnA

 

РЕШЕНИЕ

динамический массив

 

Анализ алгоритма

Занесем имена людей в динамический массив. Затем ответим на запросы.

 

Реализация алгоритма

Объявим массив указателей names для хранения имен. Объявим дополнительно символьный массив s.

 

#define SIZE 100005

char *names[SIZE];

char s[SIZE];

 

Читаем количество людей n и число запросов m.

 

scanf("%d %d", &n, &m);

for (i = 0; i < n; i++)

{

 

Читаем имя человека s и вычисляем его длину len.

 

  scanf("%s", s);

  int len = strlen(s) + 1;

 

Выделяем память под имя человека. Копируем имя из строки s.

 

  names[i] = (char *)malloc(len);

  strncpy(names[i], s, len);

}

 

Обрабатываем m запросов.

 

for (i = 0; i < m; i++)

{

 

Читаем значения a и b. Выводим символ номер B в имени человека номер A.

 

  scanf("%d %d", &a, &b);

  putchar(names[a - 1][b]);

}

 

Реализация алгоритма – stl

 

#include <iostream>

#include <string>

#include <vector>

using namespace std;

 

int i, j, n, m, a, b;

vector<string> s;

string q;

 

int main(void)

{

  cin >> n >> m;

  s.push_back("");

  for (i = 0; i < n; i++)

  {

    cin >> q;

    s.push_back(q);

  }

 

  for (i = 0; i < m; i++)

  {

    cin >> a >> b;

    printf("%c", s[a][b]);

  }

  printf("\n");

  return 0;

}